Vba textbox [h]mm



  • Vba textbox [h].mm
    di Gagen data: 16/12/2010

    Salve, ho realizzato un foglio per l'ufficio con le mie pochissime conoscenze e le info trovate.
    ora ho un problema:
    una textbox deve restituire il valore di una cella che ha una formattazione personalizzata [h].mm
    per esempio se nella cella c'è 29.30 la textbox visualizza 5.30 con il codice
    textbox10 = format(textbox10, "hh:mm")
    mi aiutate
    grazie!!



  • di Baz (utente non iscritto) data: 16/12/2010

    Ciao,
    perdonami, ma potresti fare un esempio + chiaro?

    esempio
    cella a1
    valore 29.30
    formattata [h]:mm

    nella userform, come carichi la textbox?
    es.
    textbox1 = range("a1")
    ..

    cosa vuoi ottenere?



  • di Gagen (utente non iscritto) data: 16/12/2010

    Esatto, nella textbox deve essere visualizzato il valore della cella così come è scritto (29.30)
    se non formatto anche la textbox, mi visualizza 1,2.....
    se la formatto (hh:mm) mi restituisce 5.30
    ti ringrazio e spero di errere stato chiaro



  • di Baz (utente non iscritto) data: 17/12/2010

    Ciao,
    prova così
     
    Private Sub UserForm_Activate()
    
    TextBox1 = Range("a1").Text
    
    End Sub
    



  • di Gagen (utente non iscritto) data: 18/12/2010

    Ottimo funziona!
    grazie
    ora devo provare a fare un'altra cosa e se posso nei prossimi giorni se ho difficoltà, posso richiedere aiuto?
    per ora grazie ancora



  • di Gagen (utente non iscritto) data: 19/12/2010

    Scusate il post consecutivo, ma ecco l'altro problema che non risolvo:
    ho due fogli a e b
    nel foglio a la colonna d contiene un elenco di nomi in un ordine non alfabetico; la colonna ae un valore (frutto di una formula) la colonna af un altro valore (frutto di un'altra formula) per ognuno dei nomi della colonna d

    nel foglio b la colonna d contiene lo stesso elenco di nomi ma in ordine alfabetico.

    con un pulsante "aggiorna" devo copiare il valore delle celle delle colonna ae e af del foglio a nelle colonne e ed f del foglio b,in modo che ci sia la stessa corrispondenza del foglio di origine

    spero di esssere stato chiaro
    grazie



  • di Baz (utente non iscritto) data: 20/12/2010

    Ciao,
    avrei ovviamente delle domande:

    1- suppongo tu non possa avere tutto nello stesso foglio (forse sarebbe anache + chiaro come lettura, ma non importa)

    2- i nomi sono univoci?

    3- ti servirebbero solo quelle colonne indicate come valori e non formule?

    fai sapere



  • di Baz (utente non iscritto) data: 20/12/2010

    ... dimenticavo:

    ma non si potrebbe riordinare anche il foglio a e poi copiare semplicemente le colonne che ti interessano?



  • di Gagen (utente non iscritto) data: 20/12/2010

    Si tratta di un file per la gestione del personale.

    in un foglio lo stesso è diviso per squadre e organizzato in un calendario perpetuo che ne visualizza i turni annuali. nell'altro gestisco tutte le variabili tipo ferie, malattie, straordinari ecc. ecco perchè devono essere due fogli separati e non è possibile semplificare come mi proponi.

    per ciò che mi chiedi
    - i nomi sono univoci (in caso di omonimia diversifichiamo con un numero)
    - mi serve solo il valore (mi spiego: nel calendario ci sono due colonne che con una formula mi contano i giorni identificati come ferie e quelli identificati come malattie. questi due valori devono essere copiati nell'altro foglio)

    spero di essere stato chiaro.

    per ora ho fatto una macro che fa così:
    copio in celle di appoggio del foglio calendario le tre colonne (nome, valore1 , valore2) le seleziono e le riordino. poi copio le tre colonne una alla volta nel foglio successivo e infine cancello le celle d'appoggio. funziona, ma volevo evitare l'uso delle celle d'appoggio e avere un codice vba più snello.

    scusate se sono stato un po' lungo ma spero almeno chiaro.

    grazie ancora



  • di Baz (utente non iscritto) data: 20/12/2010

    Io avrei fatto 2 cicli, ma bisognerebbe vedere quanti nominativi hai, in quanto potrebbe essere lunga l'elaborazione.

    modifica il nome dei tuoi fogli, nell'esempio sotto ho messo "a" e "b" come da tue indicazioni


    fai sapere
     
    Sub Aggiorna()
    Dim ElencoA, clA
    Dim ElencoB, clB
    
    With Sheets("a")
        Set ElencoA = .Range(.Cells(2, 4), .Cells(Rows.Count, 4).End(xlUp))
    End With
        
    With Sheets("b")
        Set ElencoB = .Range(.Cells(2, 4), .Cells(Rows.Count, 4).End(xlUp))
        
        'inizio il cilco nell'elenco dei nomi del foglio A
        For Each clB In ElencoB
            
            'per ogni cella del foglio A analizzo le varie celle
            'nell'elenco dei nomi del foglio B
            For Each clA In ElencoA
            
                'se trovo corrispondenza
                If clA = clB Then
                    'metto il valore del foglio A presente in AE in E del foglio B
                    .Cells(clB.Row, 5) = clA.Offset(0, 27).Value
                    
                    'metto il valore del foglio A presente in AF in F del foglio B
                    .Cells(clB.Row, 6) = clA.Offset(0, 28).Value
                    Exit For
                End If
            Next
        Next
    End With
    MsgBox "Fine"
    
    End Sub
    



  • di Gagen (utente non iscritto) data: 20/12/2010

    A naso funzionerebbe se nonfosse che l'elenco prevede un centinaio di nomi.
    forse va bene la macro che ho e che ti srivo sotto, magari la si può migliorare. io l'ho fatta col registratore
     
    Private Sub CommandButton3_Click()
          'Elimina protezione
        Sheets("QUADRO GENERALE").Select
        ActiveSheet.Unprotect
        
        Application.ScreenUpdating = False 'disattiva l'aggiornamento dello schermo
        
        Range("A5:A163").Select  'cancella elenchi
        Range("C5:C163").Select
        Range("M5:M163").Select
        Selection.ClearContents
          
          'copia nelle celle di appoggio le colonne non in ordine alfabetico
        
        Sheets("QUADRO ORARIO gennaio luglio").Select
        Range( _
            "D8:D11,D13:D19,D21:D30,D32:D41,D43:D52,D54:D63,D65:D84,D86:D95,D97:D116,D118:D127" _
            ).Select
        Selection.Copy
        Sheets("QUADRO GENERALE").Select
        Range("B170").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Application.CutCopyMode = False
        
        Sheets("QUADRO ORARIO AGOSTO MARZO").Select
        Range( _
            "IP8:IP11,IP13:IP19,IP21:IP30,IP32:IP41,IP43:IP52,IP54:IP63,IP65:IP84,IP86:IP95,IP97:IP116,IP118:IP127" _
            ).Select
        Selection.Copy
        Sheets("QUADRO GENERALE").Select
        Range("C170").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Application.CutCopyMode = False
        
        Sheets("QUADRO ORARIO AGOSTO MARZO").Select
        Range( _
            "IT8:IT11,IT13:IT19,IT21:IT30,IT32:IT41,IT43:IT52,IT54:IT63,IT65:IT84,IT86:IT95,IT97:IT116,IT118:IT127" _
            ).Select
        Selection.Copy
        Sheets("QUADRO GENERALE").Select
        Range("D170").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Application.CutCopyMode = False
    
              ' metti in ordine alfabetico
    Sheets("QUADRO GENERALE").Select
    With Range("B170:D290")    'Area che comprende tutti i dati
    .Sort Key1:=Range("B170"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal
    End With
    
    
        'copia le colonne riordinate
    
        Range("B170:B328").Select
        Selection.Copy
        Range("A5").Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Application.CutCopyMode = False
        
            Range("C170:C328").Select
        Selection.Copy
        Range("M5").Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Application.CutCopyMode = False
        
            Range("D170:D328").Select
        Selection.Copy
        Range("C5").Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Application.CutCopyMode = False
    
          ' cancella celle di appoggio
         
    Range("B170:D290").Select
    Selection.ClearContents
           
             'ativa protezione foglio
     ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
            , AllowFiltering:=True
    End Sub



  • di Baz (utente non iscritto) data: 20/12/2010

    Non ho capito, ma hai provato il mio codice oppure no?

    l'ho appena provata con 300 nomi ed impiega meno di 3 secondi!!!

    se invece ha qualcosa che non ti va o non ti funziona, fai sapere.



  • di Gagen (utente non iscritto) data: 20/12/2010

    Scusa, ma avevo capito che con molti nomi bisognava scrivere tanto codice, invece leggendo bene, hai scritto un codice che scorre tutte le celle (o almeno scredo!!)
    spero domani di adattarlo ai miei fogli e vedere se funziona, poi ti faccio sapere
    comunque ti ringrazio davvero per la disponibilità e complimenti per le tue conoscenze



  • di Baz (utente non iscritto) data: 21/12/2010

    Prova pure, ma se hai bisogno per modificare i riferimenti (io ho preso quelli da te indicati) scrivi pure.